import time
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait



#   定义一个检查页面的高度，查看是否滑到底部(目的是为了让元素全部加载完毕)的方法
def scroll_to_bottom(driver):
    # 获取当前页面的高度
    last_height = driver.execute_script("return document.body.scrollHeight")

    while True:
        # 向下滚动到底部
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        time.sleep(2)  # 等待页面加载

        # 获取新的页面高度
        new_height = driver.execute_script("return document.body.scrollHeight")

        # 如果页面高度没有变化，说明已经滑到底部
        if new_height == last_height:
            break
        last_height = new_height





# 平滑滚动到顶部
def scroll_up(driver):
    driver.execute_script("""
        function smoothScrollToTop() {
            var distance = 30;  // 每次滚动的距离（减小滚动步长）
            var delay = 30;     // 滚动间隔（毫秒，增大延时）
            var scrolled = window.pageYOffset;

            function scroll() {
                if (scrolled > 0) {
                    window.scrollBy(0, -distance);  // 向上滚动
                    scrolled -= distance;
                    setTimeout(scroll, delay);  // 延时滚动
                }
            }
            scroll();
        }
        smoothScrollToTop();
    """)
    time.sleep(3)  # 等待页面加载
    # WebDriverWait(driver, 20).until(
    #     lambda driver: driver.execute_script("""
    #         return Array.from(document.images).every(img => img.complete && img.naturalWidth > 0);
    #     """)
    # )

# 平滑滚动到底部
def scroll_down(driver):
    driver.execute_script("""
        function smoothScrollToBottom() {
            var distance = 30;  // 每次滚动的距离（减小滚动步长）
            var delay = 30;     // 滚动间隔（毫秒，增大延时）
            var totalHeight = document.body.scrollHeight;
            var scrolled = window.pageYOffset;

            function scroll() {
                if (scrolled < totalHeight) {
                    window.scrollBy(0, distance);  // 向下滚动
                    scrolled += distance;
                    setTimeout(scroll, delay);  // 延时滚动
                }
            }
            scroll();
        }
        smoothScrollToBottom();
    """)
    time.sleep(3)  # 等待页面加载
    # WebDriverWait(driver, 20).until(
    #     lambda driver: driver.execute_script("""
    #         return Array.from(document.images).every(img => img.complete && img.naturalWidth > 0);
    #     """)
    # )


#   定义一个让页面滑动两次，一次向上，一次向下   scroll:滚动    up:向上   down:下来
def scroll_up_and_down(driver):
    scroll_up(driver)           #   向上滑动
    scroll_down(driver)         #   向下滑动
